/**
 * @Author: zhongyang
 * @Date: 2022/6/25 14:48
 */

package main

import "fmt"

/**
07_适配器模式
概念：将一个类的接口转换成客户希望的另外一个接口，使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
类似于转换插座
就是包了一层，让原本不适配的参数在中间层进行转换
*/

// =============1.被适配对象=================
// 被适配的接口

type Adapter interface {
	SpecRequest(int, int) string
}

// 接口载体
type AdapterImpl struct {
}

func NewAdapter() Adapter {
	return &AdapterImpl{}
}

func (a *AdapterImpl) SpecRequest(int, int) string {
	return "目标对象：SpecRequest"
}

// ===============2.适配的目标对象=====================
// 适配的目标接口
type Target interface {
	Request(int, int) string
}

type AdapterImplDsc struct {
	Adapter
}

func (ad *AdapterImplDsc) Request(a, b int) string {
	return ad.SpecRequest(a, b)
}

func NewTarget(ad Adapter) Target {
	return &AdapterImplDsc{ad}
}

func main() {
	ad := NewAdapter()
	target := NewTarget(ad)
	res := target.Request(1, 2)
	fmt.Println(res)
}
